package com.pedronveloso.wikipahelper;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

import android.app.Activity;
import android.content.Intent;
import android.hardware.Camera;
import android.hardware.Camera.Size;

import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Principal extends Activity implements OnClickListener {
    
	StringBuilder corpoMensagem = new StringBuilder();

    /**
     * Escreve LOGS do programa, para serem lidos pelo Logcat
     * @param msg
     */
    public void escreveLogs(String msg)
    {
        Log.v("WikipaHelper : ",msg);
    }

    public void textoCabecalho()
    {
        corpoMensagem.append("<table border=\"1\" cellpadding=\"5\">");
    }

    public void textRodape()
    {
        corpoMensagem.append("</table>");
    }

    public void textoDuplaEntrada(String nomeCat, String titulo1,String titulo2, String desc1,String desc2)
    {
        corpoMensagem.append("<tr> <th rowspan=\"2\">"+nomeCat+"</th>");
        corpoMensagem.append("   <td>'''"+titulo1+"''': "+desc1+"</td> </tr>");
        corpoMensagem.append("<tr>   <td>'''"+titulo2+"''': "+desc2+"</td> </tr>");
    }

    public void textoTriplaEntrada(String nomeCat, String titulo1,String titulo2,String titulo3,
                                   String desc1,String desc2,String desc3)
    {
        corpoMensagem.append("<tr> <th rowspan=\"3\">"+nomeCat+"</th>");
        corpoMensagem.append("   <td>'''"+titulo1+"''': "+desc1+"</td> </tr>");
        corpoMensagem.append("<tr>   <td>'''"+titulo2+"''': "+desc2+"</td> </tr>");
        corpoMensagem.append("<tr>   <td>'''"+titulo3+"''': "+desc3+"</td> </tr>");
    }

    public void textoHexaEntrada(String nomeCat, String titulo1,String titulo2,String titulo3,
                                 String titulo4,String titulo5,String titulo6,
                                   String desc1,String desc2,String desc3,
                                   String desc4,String desc5,String desc6)
    {
        corpoMensagem.append("<tr> <th rowspan=\"6\">"+nomeCat+"</th>");
        corpoMensagem.append("   <td>'''"+titulo1+"''': "+desc1+"</td> </tr>");
        corpoMensagem.append("<tr>   <td>'''"+titulo2+"''': "+desc2+"</td> </tr>");
        corpoMensagem.append("<tr>   <td>'''"+titulo3+"''': "+desc3+"</td> </tr>");
        corpoMensagem.append("<tr>   <td>'''"+titulo4+"''': "+desc4+"</td> </tr>");
        corpoMensagem.append("<tr>   <td>'''"+titulo5+"''': "+desc5+"</td> </tr>");
        corpoMensagem.append("<tr>   <td>'''"+titulo6+"''': "+desc6+"</td> </tr>");
    }

    public void textoPentaEntrada(String nomeCat, String titulo1,String titulo2,String titulo3,
                                 String titulo4,String titulo5,
                                   String desc1,String desc2,String desc3,
                                   String desc4,String desc5)
    {
        corpoMensagem.append("<tr> <th rowspan=\"5\">"+nomeCat+"</th>");
        corpoMensagem.append("   <td>'''"+titulo1+"''': "+desc1+"</td> </tr>");
        corpoMensagem.append("<tr>   <td>'''"+titulo2+"''': "+desc2+"</td> </tr>");
        corpoMensagem.append("<tr>   <td>'''"+titulo3+"''': "+desc3+"</td> </tr>");
        corpoMensagem.append("<tr>   <td>'''"+titulo4+"''': "+desc4+"</td> </tr>");
        corpoMensagem.append("<tr>   <td>'''"+titulo5+"''': "+desc5+"</td> </tr>");
    }

    /**
     * Método para ler um ficheiro do sistema
     * @param caminho
     */
    public void lerFicheiroSistema(String caminho,String titulo)
    {
        corpoMensagem.append("\n\n ==== "+titulo+" ====\n\n");
                try {
                    FileReader leitor = new FileReader(caminho);
                    BufferedReader buff = new BufferedReader(leitor);
                    String linha=null;

                    try {
                        while((linha=buff.readLine())!=null)
                        {
                            corpoMensagem.append(linha+"\n");
                        }
                        leitor.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                        escreveLogs("ERRO NA LEITURA DE "+caminho+" (1)");
                    }


                } catch (FileNotFoundException e) {
                    escreveLogs("ERRO NA LEITURA DE \"+caminho+\" (2)");
                    e.printStackTrace();
                }

    }

	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        Button btn = (Button) findViewById(R.id.ButtonGerarCodEquip);
        btn.setOnClickListener(this);

        textoCabecalho();

        textoDuplaEntrada("Sistema","Versões de Android disponíveis oficialmente","Nome Técnico",
                android.os.Build.DISPLAY+" sobre um kernel de Linux (ver embaixo)",android.os.Build.BOARD);

        textoDuplaEntrada("Tamanho","Dimensões Físicas","Peso",
                "mm","gr");

        // INFORMAÇÃO RESPEITANTE AO ECRÃ
        escreveLogs("Vai iniciar a recolha de informações do ecra");
        Display display = getWindowManager().getDefaultDisplay();

        textoTriplaEntrada("Ecrã","Tipo","Tamanho","Taxa de refrescamento",
                "(Capacitive ou resistive), (número de cores que consegue mostrar )",
                display.getWidth()+"x"+display.getHeight()+"px, "+getString(R.string.screedpi)+" DPI",
                display.getRefreshRate()+" Hz");

        textoDuplaEntrada("Som","Suporta Alta Voz?","Tipo de saída áudio",
                "(Sim|Não)","(jack 3.5mm, mini-USB, inexistente)");

        textoTriplaEntrada("Memória","RAM","Memória Interna","Expansível com cartão microSD",
                "(Ver o valor do campo MemTotal em baixo) MB",
                "MB",
                "( se sim, dizer também se já vem com algum cartão, e qual o tamanho ocupado pelo mesmo em MB )");

        textoHexaEntrada("Conectividade","Redes móveis suportadas","Conectividade WiFi","Bluetooth","Infra-Vermelhos",
                "Entradas e/ou saídas de dados","Suporta Rádio?"," (GSM, EDGE, etc)",
                "(802.11 b/g/n)","(v3.0 com A2DP)","(Sim | Não)","( mini USB, HDMI, etc)","(Sim , FM, AM ou ambos| Não)");


        // INFORMAÇÃO RESPEITANTE À CÂMARA
        escreveLogs("Vai iniciar a recolha de informações da camara");
        Camera camera = Camera.open();
        Camera.Parameters params = camera.getParameters();
        /*if (params.getFlashMode()!=null)
        {
        	if (params.getFlashMode().compareTo("off")==0)
        	{
        		corpoMensagem.append("\nCâmara - Flash : Não suportado");
        	}
        	else
        		corpoMensagem.append("\nCâmara - Flash : Sim - "+params.getFlashMode());
        }

        if (params.getFocusMode().compareTo("off")==0)
        {
        	corpoMensagem.append("\nCâmara - Auto-Focus  : Não suportado");
        }
        else
        	corpoMensagem.append("\nCâmara - Auto-Focus  : Sim - "+params.getFocusMode());
        */

        //corpoMensagem.append("\nCâmara - Ângulo de visão horizontal : "+
        	//	params.getHorizontalViewAngle());

        ArrayList<Camera.Size> listaTamanhos = new ArrayList<Camera.Size>(params.getSupportedPictureSizes());
        Iterator<Camera.Size> it= listaTamanhos.iterator();
        Camera.Size tam1 ;
        StringBuilder strAux1=new StringBuilder();
        while(it.hasNext())
        {
        	tam1=it.next();
        	strAux1.append("\t "+tam1.width+"x"+tam1.height+"px");
        }

        corpoMensagem.append("\nCâmara - Tamnhos de foto suportados  : ");

        textoPentaEntrada("Câmara","Resoluções de foto suportadas","Resolução máxima de vídeo","Flash","Capacidades","Câmara Frontal",
                strAux1.toString(),"(gravação de vídeo 640x320 px @ 30 FPS)","(Sim - de que tipo? (LED) | Não ) ",
                "(Autofocus, Geo-tagging, zoom digital/óptico, detecção de sorrisos, etc)","( Sim - com descrição da resolução | Não)");


        textoHexaEntrada("Componentes","CPU","Frequência máxima de operação","Steppings disponíveis de origem",
                "GPU","Outros Sensores Disponíveis","Bateria",android.os.Build.CPU_ABI,
                "Mhz","Mhz","nome (se disponível), versão do OpenGL suportada",
                "(Bússola, Temperatura, Campo Magnético, Sensor de proximidade, Sensor de luminosidade)",
                "mAh");

        textRodape();

        // RECOLHER INFORMAÇÃO DO DISPOSITIVO
        /*escreveLogs("A recolher informações genéricas");
        
        corpoMensagem.append("\nNome do dispositivo : "+android.os.Build.DEVICE);
        corpoMensagem.append("\nBoard : "+android.os.Build.BOARD);
        corpoMensagem.append("\nCPU : "+android.os.Build.CPU_ABI);
        corpoMensagem.append("\nVersão Android (Código-Nome) : "+android.os.Build.DISPLAY);
        corpoMensagem.append("\nFirmware : "+android.os.Build.FINGERPRINT);
        
        corpoMensagem.append("\nMarca : "+android.os.Build.BRAND);
        corpoMensagem.append("\nNome Comercial : "+android.os.Build.PRODUCT);

          */

        

        

        /* LEITURA DE FICHEIROS DA DIRECTORIA PROC */

        escreveLogs("Vai iniciar a recolha de informações da directoria /proc");

        lerFicheiroSistema("/proc/cpuinfo","CPU INFO");
        lerFicheiroSistema("/proc/meminfo","MEM INFO");
        lerFicheiroSistema("/proc/version","KERNEL INFO");
        lerFicheiroSistema("/proc/partitions","PARTIÇÕES");
        //lerFicheiroSistema("/proc/partitions","PARTIÇÕES");
        //lerFicheiroSistema("/proc/partitions","PARTIÇÕES");

        escreveLogs("Vai finalizar a recolha de informações da directoria /proc");
        

        
    }

	public void onClick(View which) {
		switch (which.getId()) {
		case R.id.ButtonGerarCodEquip:
			// Contruir o email para envio da descrisão do equipamento
	        final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
	        
	        emailIntent .setType("plain/text");
	        emailIntent .putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"wikipandroidpt@googlegroups.com"});
	        emailIntent .putExtra(android.content.Intent.EXTRA_SUBJECT,getString(R.string.sujeito));
	        
	        // Colocar o corpo do texto já formatado
	        emailIntent .putExtra(android.content.Intent.EXTRA_TEXT, corpoMensagem.toString());
	        
	        startActivity(Intent.createChooser(emailIntent, "Enviar email..."));
			
			break;

		default:
			break;
		}
		
	}
}